home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The 640 MEG Shareware Studio 2
/
The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO
/
basic
/
basfrm13.zip
/
PC-MAZE.OLD
< prev
Wrap
Text File
|
1992-07-04
|
7KB
|
200 lines
10 REM PC-MAZE - MODIFIED FOR EASIER USE ON THE IBM-PC
20 REM BY JAMES R. DAVIS
30 KEY OFF
40 CLEAR,,20000
50 SCREEN 0:WIDTH 40
60 CLS : GOTO 450
70 N = 2:A = H:B = V:FF = 2 ^ (F - 1)
80 SCREEN 1:COLOR 0,1:CLS
90 Z = M(A,B) * FF
100 IF FN M(Z / 16) = 0 THEN 130
110 RL = - 1: GOSUB 390
120 GOTO 160
130 W = M(A + S,B - R) * FF
140 IF FN M(W / 128) = 0 THEN 160
150 RL = -1: GOSUB 340
160 IF FN M(Z / 64) = 0 THEN 190
170 RL = 1: GOSUB 390
180 GOTO 220
190 W = M(A - S,B + R) * FF
200 IF FN M(W / 128) = 0 THEN 220
210 RL = 1: GOSUB 340
220 IF FN M(Z / 128) = 1 THEN 260
230 N = N + 1: IF N > 8 THEN 270
240 A = A + R:B = B + S: IF B < 2 THEN 270
250 GOTO 90
260 GOSUB 280
270 RETURN
280 PSET (VX + DX(N),YU(N)),2
290 LINE (VX + DX(N),YU(N))-(VX + DX(N),YD(N)),2
300 LINE (VX + DX(N),YD(N))-(VX - DX(N),YD(N)),2
310 LINE (VX - DX(N),YD(N))-(VX - DX(N),YU(N)),2
320 LINE (VX - DX(N),YU(N))-(VX + DX(N),YU(N)),2
330 RETURN
340 PSET (VX + RL * DX(N - 1),YU(N)),2
350 LINE (VX + RL * DX(N - 1),YU(N))-(VX + RL * DX(N),YU(N)),2
360 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
370 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N)),2
380 RETURN
390 PSET(VX + RL * DX(N - 1),YU(N - 1)),2
400 LINE (VX + RL * DX(N-1),YU(N-1))-(VX + RL * DX(N),YU(N)),2
410 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
420 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N - 1)),2
430 IF N > 2 THEN LINE (VX + RL * DX(N-1),YD(N-1))-(VX + RL * DX(N - 1),YU(N - 1)),2
440 RETURN
450 CLS:COLOR 9,0:LOCATE 6,12: PRINT "YOU ARE THE RAT!": PRINT : LOCATE 4,4: PRINT "A DIFFERENT PERSPECTIVE ON MAZES."
460 CH = 0
470 PRINT : LOCATE 1,1: PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP"
480 LOCATE 2,9: PRINT "PUBLIC ACCESS DATABASE"
490 LOCATE 17,1: PRINT "----------------------------------------"
500 LOCATE 18,9: PRINT "USE <- AND -> TO TURN"
510 PRINT : LOCATE 19,6: PRINT "<SPACE BAR> TO MOVE FORWARD"
520 PRINT : LOCATE 20,3: PRINT "<ESCAPE> FOR A TOP VIEW (TO CHEAT)"
530 DEF FN M(X) = INT(X) - INT(INT(X) / 2) * 2
540 LOCATE 15,1:FX = 36: INPUT "PLEASE ENTER MAZE SIZE (H,V) ";H,V
550 H = INT(H):V = INT(V)
560 IF H > 2 AND H < 51 AND V > 2 AND V < 51 THEN 580
570 PRINT "2<H<51 -- 2<V<51": GOTO 540
580 N = H * V - 1:H = H + 1:V = V + 1:D = 1
590 DIM M(52,52),W(400)
600 FOR J = 1 TO V + 1:M(1,J) = 4:M(H + 1,J) = 1: NEXT J
610 MX = 278:MY = 190:VX = INT(MX / 2):VY = INT(MY / 2):X = VX
620 FOR J = 1 TO 8:DX(J) = X:YU(J) = INT(VY - X * VY / VX)
630 YD(J) = INT(VY + X * (MY - VY) / VX):X = INT(X * 7 / 10): NEXT J
640 FOR I = 2 TO H:M(I,V + 1) = 8:M(I,1) = 2
650 FOR J = 2 TO V:M(I,J) = 15: NEXT J,I
660 R = INT(H / 2 + 1):S = INT(V / 2 + 1):M(R,S) = 15
670 COLOR 23
680 PRINT " GENERATING MAZE."
690 COLOR 9
700 FOR IW = 1 TO N
710 I = 0
720 IF M(R - 1,S) < 15 THEN 740
730 I = I + 1:C(I) = 1
740 IF M(R,S - 1) < 15 THEN 760
750 I = I + 1:C(I) = 2
760 IF M(R + 1,S) < 15 THEN 780
770 I = I + 1:C(I) = 3
780 IF M(R,S + 1) < 15 THEN 800
790 I = I + 1:C(I) = 4
800 IF I = 0 THEN 990
810 IF I <> 1 THEN I = INT(RND(TIMER) * I) + 1
820 ON C(I) GOTO 830,870,910,950
830 M(R,S) = M(R,S) - FN M(M(R,S))
840 R = R - 1
850 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4
860 GOTO 1100
870 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8
880 S = S - 1
890 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2
900 GOTO 1100
910 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4
920 R = R + 1
930 M(R,S) = M(R,S) - FN M(M(R,S))
940 GOTO 1100
950 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2
960 S = S + 1
970 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8
980 GOTO 1100
990 IF D = -1 THEN 1030
1000 IF R <> H THEN 1070
1010 IF S <> V THEN 1060
1020 R = 2:S = 2: GOTO 1080
1030 IF R <> 2 THEN 1070
1040 IF S <> V THEN 1060
1050 R = H:S = 2: GOTO 1080
1060 S = S + 1:D = -D: GOTO 1080
1070 R = R + D
1080 IF M(R,S) = 15 THEN 990
1090 GOTO 710
1100 NEXT IW
1110 MH = H:MV = V
1120 I = INT(RND(TIMER) * (MH - 1)) + 2
1130 M(I,1) = 0
1140 M(I,2) = M(I,2) - FN M(M(I,2) / 8) * 8
1150 H = INT(RND(TIMER) * (MH - 1)) + 2
1160 H1 = H:V1 = V
1170 COLOR 23: LOCATE 23,12: PRINT "MAZE COMPLETED.": COLOR 9
1180 GOTO 1390
1190 HZ = INT(MX / MH):VZ = INT(MY / MV)
1200 CH = CH + 1
1210 SCREEN 1:COLOR 0,1:CLS
1220 PSET (1 + HZ,1 + VZ),2
1230 LINE (1 + HZ,1 + VZ)-(1 + HZ,MV * VZ + 1),2
1240 FOR J = 1 TO MV: FOR I = 2 TO MH
1250 N = M(I,J):X = I * HZ + 1:Y = J * VZ + 1
1260 IF FN M(N / 2) = 0 THEN 1290
1270 PSET (X,Y),2
1280 LINE (X,Y)-(X - HZ,Y),2
1290 IF FN M(N / 4) = 0 THEN 1320
1300 PSET (X,Y),2
1310 LINE (X,Y)-(X,Y - VZ),2
1320 NEXT I,J
1330 X = H * HZ - 1:Y = V * VZ - 1
1340 PSET (X + 1,Y + 1),2
1350 LINE (X + 1,Y + 1)-(X - HZ + 2,Y - VZ + 2),2
1360 PSET (X - HZ + 2,Y + 1),2
1370 LINE (X - HZ + 2,Y + 1)-(X + 1,Y - VZ + 2),2
1380 RETURN
1390 FOR X = 1 TO MH: FOR Y = 1 TO MV
1400 M(X,Y) = M(X,Y) + M(X,Y) * 16
1410 NEXT Y,X
1420 F = INT(RND(TIMER) * 4) + 1
1430 ON F GOTO 1440,1450,1460,1470
1440 R = 0:S = -1: GOTO 1480
1450 R = 1:S = 0: GOTO 1480
1460 R = 0:S = 1: GOTO 1480
1470 R = - 1:S = 0
1480 GOSUB 70
1490 DEF SEG : POKE 106,0
1500 IK$=INKEY$
1510 'KEY(12) ON
1520 'KEY(13) ON
1530 IF IK$=CHR$(0)+CHR$(75) THEN GOSUB 1580
1540 IF IK$=CHR$(0)+CHR$(77) THEN GOSUB 1600
1550 IF IK$ = " " THEN 1660
1560 IF IK$ = CHR$(27) THEN 1770
1570 GOTO 1500
1580 F = F - 1: IF F < 1 THEN F = 4
1590 GOTO 1610
1600 F = F + 1: IF F > 4 THEN F = 1
1610 ON F GOTO 1620,1630,1640,1650
1620 R = 0:S = -1: GOTO 1750
1630 R = 1:S = 0: GOTO 1750
1640 R = 0:S = 1: GOTO 1750
1650 R = -1:S = 0: GOTO 1750
1660 Z = M(H,V)
1670 T = Z * 2 ^ (F - 1):T = FN M(T / 128)
1680 IF T = 0 THEN 1700
1690 GOTO 1490
1700 NM = NM + 1: LOCATE 22,24: PRINT "MOVE "NM
1710 FOR Q=1 TO 500:NEXT
1720 IF NM < 400 THEN W(NM) = F
1730 H = H + R:V = V + S
1740 IF V < 2 THEN 1790
1750 GOSUB 70
1760 GOTO 1490
1770 GOSUB 1190
1780 GOTO 1490
1790 CLS : LOCATE 12,5: PRINT "CONGRATS, IT TOOK YOU "NM" STEPS."
1800 IF CH = 1 THEN LOCATE 14,8: PRINT "(BUT YOU CHEATED ONCE.)
1810 IF CH > 1 THEN LOCATE 14,6: PRINT " (BUT YOU CHEATED ";CH;" TIMES.)"
1820 FOR I=1 TO 5000:NEXT
1830 V = V1:H = H1: GOSUB 1190
1840 X = INT(H * HZ - HZ / 2) + 1:Y = INT(V * VZ - VZ / 2) + 1
1850 PSET (X,Y),1
1860 FOR N = 1 TO NM
1870 IF N > 400 THEN 1950
1880 F = W(N)
1890 IF F = 1 THEN V = V - 1
1900 IF F = 2 THEN H = H + 1
1910 IF F = 3 THEN V = V + 1
1920 IF F = 4 THEN H = H - 1
1930 LINE (X,Y)-(INT(H * HZ - HZ / 2) + 1,INT(V * VZ - VZ / 2) + 1),1
1940 X=INT(H * HZ - HZ/2) + 1:Y=INT(V * VZ -VZ/2) + 1
1950 NEXT N
1960 LOCATE 1,1:PRINT "PRESS ANY KEY TO CONTINUE"
1970 IK$=INKEY$
1980 IF IK$ = "" THEN 1970
1990 CLEAR:GOTO 40